'''
Created on 15/12/2011

@author: nacho
'''

class Swapper(object):
    '''
    classdocs
    '''


    def __init__(self, so, mmu):
        '''
        Constructor
        '''
        
        self.so = so
        self.mmu = mmu
        
        
    def newProcessNoMemory(self, pid):
        
        if self.so.doesItDeserveMemory(pid):
            
            pidToLeave = self.so.nextToLeave()
            self.mmu.unload(pidToLeave)
            progr = self.so.getProgram(pid)
            self.mmu.load(pid, progr)
            self.so.saveInDisk(pidToLeave)
            self.so.deleteFromDisk(pid)
            self.so.swappingSuccesful()
        
            
            
    def processInDiskNeedMemory(self):
        #antes de llamar a esto, tengo que asegurarme que saque el otro de memoria
        #self.so.stopRunning()
        
        pid = self.so.choosePidToLoad()
        progr = self.so.getProgram(pid)
        self.mmu.load(pid, progr)
        self.so.removeFromDisk(pid)
        self.so.start()
        #self.so.swappingSuccesful()
        
            
            
            